Инструкция по установке EAI почтового сервера под ОС Ubuntu 22.04 LTS
Установка EAI почтового сервера
С помощью данной инструкции вы сможете установить почтовый сервер с поддержкой использования интернационализированных адресов электронной почты (EAI) на базе ПО с открытым исходным кодом. Почтовый сервер можно развивать далее с помощью другого ПО. Хостинг-провайдер должен изменить PTR-запись для домена на ваш IDN-домен. Проверить запись PTR можно при помощи любого внешнего инструмента.
Например: https://www.whatsmydns.net/#PTR/62.109.26.140
Подготовка системы
- Авторизуемся на удаленном сервере
ssh root@62.109.26.140
- Обновляем систему
apt update && apt upgrade -y && apt full-upgrade -y && apt dist-upgrade -y
- Очищаем систему
apt autoremove -y && apt clean -y && apt autoclean -y
- Обновляем корневые сертификаты
update-ca-certificates
- Устанавливаем необходимые утилиты
apt install nano wget net-tools -y
- Настраиваем часовой пояс
timedatectl set-timezone Europe/Moscow
- Настраиваем имя хоста
hostnamectl set-hostname xn----gtbdaqueeage2s.xn--p1ai
nano -l /etc/hosts
- и вносим
127.0.0.1 localhost xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
127.0.1.1 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
62.109.26.140 xn----gtbdaqueeage2s.xn--p1ai доменное-имя.рф
- Проверяем имя хоста
hostname
- Перезагружаем систему
reboot
Установка программных компонент
- Устанавливаем необходимые пакеты Dovecot, Postfix и MariaDB
cd && apt install postfix dovecot-core dovecot-imapd dovecot-lmtpd dovecot-pop3d mariadb-server dovecot-mysql postfix-mysql mailutils -y
- во время установки выбираем Internet Site и указываем имя домена xn----gtbdaqueeage2s.xn--p1ai
- Запускаем сервисы, включаем автозапуск и проверяем их статус
systemctl start postfix && systemctl start dovecot && systemctl start mariadb
systemctl enable postfix && systemctl enable dovecot && systemctl enable mariadb
systemctl status postfix
systemctl status dovecot
systemctl status mariadb
- Отправляем тестовое письмо
echo "Test mail" | mail -s "Test mail" happyzomb@ya.ru
- Настраиваем поддержку кодировки базы данных
nano /etc/mysql/my.cnf
- и добавляем:
[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci
skip-character-set-client-handshake
bind-address=127.0.0.1
datadir=/var/lib/mysql
log-error=/var/log/mariadb.log
pid-file=/tmp/mariadb.pid
- Завершаем установку MariaDB и проверяем статус службы
usermod -d /var/lib/mysql/ mysql
systemctl restart mariadb && systemctl status mariadb | grep Active
- Проверяем, что службы Postfix, Dovecot и MariaDB запущены и слушают соответствующие порты
netstat -tulnp
Настройка базы данных
- Авторизуемся в MariaDB
mysql -u root -p
- Создаем базу данных для Dovecot
CREATE DATABASE eaimail;
- Выбираем базу данных
USE eaimail;
- Настраиваем доступ
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost' IDENTIFIED BY '6y5ljiB9j3M7';
GRANT SELECT, INSERT, UPDATE, DELETE ON eaimail.* TO 'dbuser'@'localhost.localdomain' IDENTIFIED BY '6y5ljiB9j3M7';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'dbuser'@'localhost';
- Создаем таблицы
CREATE TABLE domains (domain varchar(50) NOT NULL, PRIMARY KEY (domain) );
CREATE TABLE forwardings (source varchar(80) NOT NULL, destination TEXT NOT NULL, PRIMARY KEY (source) );
CREATE TABLE users (email varchar(80) NOT NULL, password varchar(20) NOT NULL, PRIMARY KEY (email) );
- Добавляем значения имени домена и адресов электронной почты
INSERT INTO domains (domain) VALUES ('xn----gtbdaqueeage2s.xn--p1ai');
INSERT INTO domains (domain) VALUES ('доменное-имя.рф');
INSERT INTO users (email, password) VALUES ('info@xn----gtbdaqueeage2s.xn--p1ai', ENCRYPT('6y5ljiB9j3M7'));
INSERT INTO users (email, password) VALUES ('info@доменное-имя.рф', ENCRYPT('6y5ljiB9j3M7'));
- Настраиваем переадресацию
INSERT INTO forwardings (source,destination) VALUES ('info@доменное-имя.рф','info@xn----gtbdaqueeage2s.xn--p1ai');
- Выходим
quit
Настройка почтового сервера
1. Настраиваем связь Postfix и MariaDB
nano /etc/postfix/mysql-virtual_domains.cf
2. и вносим:
user = dbuser password = 6y5ljiB9j3M7 dbname = eaimail = SELECT domain AS virtual FROM domains WHERE domain='%s' hosts = 127.0.0.1
3. Настраиваем переадресацию
nano /etc/postfix/mysql-virtual_forwardings.cf
4. и вносим:
user = dbuser password = 6y5ljiB9j3M7 dbname = eaimail query = SELECT destination FROM forwardings WHERE source='%s' hosts = 127.0.0.1
5. Настраиваем скрипт для создания виртуальных ящиков
nano /etc/postfix/mysql-virtual_mailboxes.cf
6. и вносим:
user = dbuser password = 6y5ljiB9j3M7 dbname = eaimail query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s' hosts = 127.0.0.1
7. Настраиваем скрипт для переадресации на другой SMTP-сервер
nano /etc/postfix/mysql-virtual_email2email.cf
8. и вносим:
user = dbuser password = 6y5ljiB9j3M7 dbname = eaimail query = SELECT email FROM users WHERE email='%s' hosts = 127.0.0.1
9. Устанавливаем права на конфигурационные файлы Postfix
chmod 640 /etc/postfix/mysql-virtual_*.cf && chgrp postfix /etc/postfix/mysql-virtual_*.cf
10. Создаем группу и пользователя для виртуальных адресов
groupadd -g 5000 vmail && useradd -g vmail -u 5000 vmail -d /home/vmail -m
11. Настраиваем Postfix для использования виртуального алиаса домена
nano /etc/postfix/main.cf
12. и изменяем:
smtp_tls_security_level = may meta_directory = /etc/postfix shlib_directory = no myhostname = xn----gtbdaqueeage2s.xn--p1ai mydomain = xn----gtbdaqueeage2s.xn--p1ai mydestination = localhost, localhost.localdomain myorigin = $mydomain mynetworks = 127.0.0.1 smtpd_sasl_auth_enable = yes smtpd_sasl_type = dovecot smtpd_sasl_path = private/auth smtpd_sasl_authenticated_header = yes broken_sasl_auth_clients = yes smtpd_use_tls = yes smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 virtual_mailbox_base = /home/vmail virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-virtual_mailboxes.cf virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-virtual_domains.cf virtual_uid_maps = static:5000 virtual_gid_maps = static:5000 virtual_alias_domains = доменное-имя.рф virtual_transport = dovecot virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-virtual_forwardings.cf, mysql:/etc/postfix/mysql-virtual_email2email.cf smtputf8_enable = yes proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks
13. Настраиваем службу Postfix
nano /etc/postfix/master.cf
14. и изменяем:
smtp inet n - - - - smtpd flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}
15. Настраиваем логирование Postfix, перезапускаем и проверяем службу
postconf maillog_file=/var/log/postfix.log systemctl restart postfix && systemctl status postfix
16. Настраиваем Dovecot для подключения к базе данных
nano /etc/dovecot/dovecot-sql.conf.ext
17. и вносим:
driver = mysql connect = host=127.0.0.1 dbname=eaimail user=dbuser password=6y5ljiB9j3M7 default_pass_scheme = CRYPT password_query = SELECT email as user, password FROM users WHERE email='%u';
18. Устанавливаем права CHMOD на конфигурационные файлы Dovecot
chmod 640 /etc/dovecot/dovecot-sql.conf.ext && chgrp dovecot /etc/dovecot/dovecot-sql.conf.ext
19. Резервируем конфигурационный файл Dovecot
mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-backup
20. Настраиваем Dovecot
nano /etc/dovecot/dovecot.conf
21. и изменяем:
protocols = imap pop3 lmtp log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:/home/vmail/%d/%n/Maildir namespace { type = private separator = . prefix = INBOX. inbox = yes } service auth { unix_listener auth-master { mode = 0600 user = vmail } unix_listener /var/spool/postfix/private/auth { mode = 0666 user = postfix group = postfix } user = root } auth_mechanisms = plain login service auth-worker { user = root } protocol lda { log_path = /home/vmail/dovecot-deliver.log auth_socket_path = /var/run/dovecot/auth-master postmaster_address = postmaster@xn----gtbdaqueeage2s.xn--p1ai } protocol pop3 { pop3_uidl_format = %08Xu%08Xv pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } passdb { driver = sql args = /etc/dovecot/dovecot-sql.conf.ext } userdb { driver = static args = uid=5000 gid=5000 home=/home/vmail/%d/%n allow_all_users=yes }
22. Перезагружаем Dovecot и проверяем статус службы
systemctl restart dovecot && systemctl status dovecot | grep Active
23. Настраиваем алиас
nano /etc/aliases
24. и добавляем:
root: postmaster@xn----gtbdaqueeage2s.xn--p1ai
25. Настраиваем логирование Dovecot
nano /etc/dovecot/conf.d/10-logging.conf
26. и добавляем:
log_path = /var/log/dovecot.log auth_verbose = yes
27. Исправляем ошибку подключения Dovecot к базе данных
nano /etc/postfix/dynamicmaps.cf
28. и заменяем:
mysql /usr/lib/postfix/postfix-mysql.so dict_mysql_open
29. Перезагружаем Postfix и Dovecot
systemctl restart postfix && systemctl restart dovecot
Настройка почтового клиента
1. Создаем базу данных для веб-интерфейса Roundcube 2. авторизуемся:
mysql -u root
3. создаем базу данных:
CREATE DATABASE roundcubedb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
4. создаем пользователя:
CREATE USER rcuser@localhost IDENTIFIED BY '6y5ljiB9j3M7';
5. предоставляем ему права к базе данных:
GRANT ALL PRIVILEGES ON roundcubedb.* TO rcuser@localhost; # Перезапускаем права FLUSH PRIVILEGES; # Выходим quit
6. Устанавливаем Apache и PHP для веб-интерфейса Roundcube
apt install apache2 php8.1 php8.1-gd php8.1-common php-json php-imagick php8.1-imap php8.1-xml php8.1-opcache php8.1-mbstring php8.1-curl php8.1-zip php8.1-ldap php8.1-mysqli php8.1-bz2 php8.1-intl -y
7. Запускаем Apache, активируем автозапуск службы и проверяем статус
systemctl start apache2 && systemctl enable apache2 && systemctl status apache2
8. Скачиваем архив с исходным кодом Roundcube
cd /tmp && wget https://github.com/roundcube/roundcubemail/releases/download/1.5.2/roundcubemail-1.5.2-complete.tar.gz
9. Распаковываем архив
tar xvf roundcubemail-1.5.2-complete.tar.gz
10. Копируем файлы Roundcube в корневой каталог Apache
mv roundcubemail-1.5.2/* /var/www/html/
11. Назначаем права CHMOD на корневой каталог и файлы Roundcube
chown www-data:www-data -R /var/www && chmod -R 775 /var/www
12. Импортируем дамп базы данных Roundcube в MariaDB
cd /var/www/html && mysql -u rcuser -p roundcubedb < /var/www/html/SQL/mysql.initial.sql
13. Настраиваем Apache для работы Roundcube - задаем имя хоста, индексный файл и предоствляем права на корневой каталог
nano /etc/apache2/sites-enabled/000-default.conf
14. и вносим:
<VirtualHost *:80> ServerName xn----gtbdaqueeage2s.xn--p1ai ServerAdmin webmaster@xn----gtbdaqueeage2s.xn--p1ai DocumentRoot /var/www/html ErrorLog ${APACHE_LOG_DIR}/roundcube_error.log CustomLog ${APACHE_LOG_DIR}/roundcube_access.log combined <Directory /> Options FollowSymLinks AllowOverride All Require all granted </Directory> <Directory /var/www/html/> Options FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all Require all granted DirectoryIndex index.php </Directory> </VirtualHost>